import { ECS } from "./ECS";


export type SystemClass = {new(ecs:ECS):System};
/**
 * ECS 系统基类
 */
export abstract class System {
    /**
     * 系统优先级，数字越大越优先执行，默认为0
     */
    public priority: number = 0;

    /**
     * 系统运行的条件，默认为无限制运行
     */
    public condition(frameCount: number): boolean {
        return true;
    }

    /**
     * 系统运行的频率，指定了每隔几帧运行一次，默认为1，表示每帧都运行
     */
    public frequency: number = 1;

    /**
     * 系统是否已经启动
     */
    protected _isRunning: boolean = false;

    /**
     * 系统所属的ECS实例
     */
    protected _ecs: ECS | null = null;

    constructor(ecs: ECS) {
        this._ecs = ecs;
    }

    /**
     * 启动系统
     */
    public start(): void {
        if (this._isRunning) {
            return;
        }

        this._isRunning = true;
        this.onStart && this.onStart();
    }

    /**
     * 停止系统
     */
    public stop(): void {
        if (!this._isRunning) {
            return;
        }

        this.onStop && this.onStop();
        this._isRunning = false;
    }

    /**
     * 系统是否正在运行中
     */
    public get isRunning(): boolean {
        return this._isRunning;
    }

    /**
     * 系统开始的调用
     */
    protected abstract onStart?(): void;
    /**
     * 系统结束的调用
     */
    protected abstract onStop?(): void;
    /**
     * 系统更新的调用
     */
    public abstract onUpdate(deltaTime: number): void;
}


